题解 CF1332A@洛谷 | 1332A@Codeforces 【Exercising Walk】

这题大概就是把不行的条件判掉,剩下的都是可以的。

首先,因为 a+b+c+d1a+b+c+d\geq 1,所以 x1=x2x_1=x_2y1=y2y_1=y_2 的显然不行。

其次,如果一个方向上不能走,即 x1=x2x_1=x_2y1=y2y_1=y_2,且那个方向要走的步数不为 00,这种情况也不行。

然后,因为反方向可以相互抵消(左→右回到原位),可以先把反方向减去它们的最小值,然后判断空间是否足够即可。

完整代码:

//By: Luogu@rui_er(122461)
#include <bits/stdc++.h>
using namespace std;

int T;
int a, b, c, d, x, y, x1, y1, x2, y2; 

int main()
{
	cin>>T;
	while(T--)
	{
		a = b = c = d = x = y = x1 = y1 = x2 = y2 = 0;
		cin>>a>>b>>c>>d>>x>>y>>x1>>y1>>x2>>y2;
		if(x1 == x2 && y1 == y2)
		{
			cout<<"No"<<endl;
			continue;
		}
		if(x1 == x2 && (a || b))
		{
			cout<<"No"<<endl;
			continue;
		}
		if(y1 == y2 && (c || d))
		{
			cout<<"No"<<endl;
			continue;
		}
		int tmp = min(a, b);
		a -= tmp;
		b -= tmp;
		tmp = min(c, d);
		c -= tmp;
		d -= tmp;
		if(x - x1 < a || x2 - x < b || y - y1 < c || y2 - y < d)
		{
			cout<<"No"<<endl;
			continue;
		}
		cout<<"Yes"<<endl;
	}
	return 0;
}